import React, { ReactNode } from 'react'

export type ColumnAlign = 'left' | 'center' | 'right'

export type CellProps = React.TdHTMLAttributes<HTMLTableCellElement>

export type SortedCallbackFuction<T> = (a: T, b: T) => number

export interface RTColumn {
  /** 列的名称 */
  name: string

  /** 在数据中的字段 code */
  code?: string

  /** 列标题的展示名称；在页面中进行展示时，该字段将覆盖 name 字段 */
  title?: ReactNode

  /** 列的宽度，如果该列是锁定的，则宽度为必传项 */
  width?: number

  /** 单元格中的文本或内容的 对其方向 */
  align?: ColumnAlign

  hidden?: boolean

  /** 是否锁列 */
  lock?: boolean

  /** 表头单元格的 props */
  headerCellProps?: CellProps

  /** 排序 */
  sortable?: boolean | (SortedCallbackFuction<unknown>)
}


/** SpanRect 用于描述合并单元格的边界
 * 注意 top/left 为 inclusive，而 bottom/right 为 exclusive */
export interface SpanRect {
  top: number
  bottom: number
  left: number
  right: number
}

export type SortOrder = 'desc' | 'asc' | 'none'

export type SortItem = { code: string; order: SortOrder }
